/*
请求模块
*/
import axios from 'axios'
import JSONbig from 'json-bigint'
// 在非组件模块中获取store 必须通过这种方式
// 这里单独建在store，和在组件中  this.$store 一个东西
import store from '@/store/'
import router from '@/router/'

// const refreshTokenReq = axios.create({
//     baseURL: 'http://ttapi.research.itcast.cn/'
// })

const request = axios.create({
  baseURL: 'http://api-toutiao-web.itheima.net/', // 基础路径
  timeout: 15000,
  transformResponse: [function (data) {
    // 后端返回的数据可能不是json格式字符串
    // 如果不是的话，那么JSONbig.parse调用就会报错
    // 所以我们使用try-catch来捕获异常，处理异常的发生
    try {
      // 如果转换成功，则直接把结果返回
      return JSONbig.parse(data)
    } catch (err) {
      console.log(err)
      // 我们在这里把数据原封不动的直接返回给请求使用
      return data
    }
  }]
})

// 请求拦截器
request.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  const { user } = store.state
  // 如果用户已经登录，统一给接口设置token信息
  if (user) {
    config.headers.Authorization = `Bearer ${store.state.user.token}`
  }
  // 处理完之后一定要把config返回，否则请求就会停在这里
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 响应拦截器
// request.interceptors.response.use(function (response) {
//     // 对响应数据做点什么
//     const data = response.data
//     if (data.resCode !== 0) {
//         // Message.error(data.message)
//         return Promise.reject(data)
//         // alert(data.message)
//     } else {
//         return Promise.resolve(data)
//     }
// },async function (error) {
//     // const status = error.response.status
//     // if (status === 400) {
//     //     Message.error("客户端请求参数异常")
//     // } else if (status === 401) {
//     //     // token无效
//     //     // 如果没有user或者user.token,直接去登录
//     //     const { user } = store.state;
//     //     if (!user || !user.token) {
//     //         // 直接跳转到登录页
//     //         return redirectLogin()
//     //     }
//     //     try {
//     //         // 使用refesh_token，则请求获取新的token
//     //         // const { data } = await refreshTokenReq({
//     //         //     method: 'PUT',
//     //         //     url: '/app/v1_0/authorizations',
//     //         //     headers: {
//     //         //         Authorization: `Bearer ${user.refresh_token}`
//     //         //     }
//     //         // })

//     //         // 拿到新的token之后把它更新到容器中
//     //         // user.token = data.data.token;
//     //         // store.commit('setUser', user)

//     //         // 把失败的请求重新发出去
//     //         return request(error.config)
//     //     } catch (error) {
//     //         // 刷新token都失败了，直接跳转登录页
//     //         redirectLogin()
//     //     }
//     // } else if (status === 403) {
//     //     Message.error("没有权限操作")
//     // } else {
//     //     Message.error("服务端异常，请稍后重试")
//     // }
//   // 对响应错误做点什么
//   return Promise.reject(error)
// })

// function redirectLogin() {
//     router.replace('/login')
// }

// 导出
export default request
